// Object.create() 静态方法以一个现有对象作为原型，创建一个新对象。
// 语法Object.create(proto,propertiesObject可选)
// mdn: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create

/**
 * 
 * @param {*} proto 必须为Object or null, 否则报错
 * @param {*} propertiesObject 
 * @returns 
 */

function create(proto, propertiesObject) {
  // object array set map null function
  if (typeof proto !== 'object' && typeof proto !== 'function') {
    // string number boolean undefined
    throw new TypeError('proto must be Object or null')
  }
  // 方法一：
  // let obj = {};
  // obj.__proto__ = proto;

  // 方法二
  Object.setPrototypeOf({}, proto)

  if (typeof propertiesObject != 'undefined') {
    Object.defineProperties(obj, propertiesObject)
  }
  return obj
}

console.log(create({}))
console.log(create(null))
console.log(create([]))
console.log(create(''))// 报错


// 利用构造函数实现
// function create1(proto, propertiesObject) {
//   function Fun() { }
//   Fun.prototype = proto
//   return new Fun();
// }